using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
using Connection;
namespace Entidades
{
	public abstract class DALContratacion
	{
		private const string __ErrorAlta = "No se pudo dar el alta (Contratacion), ";
		private const string __ErrorBaja = "No se pudo dar la baja (Contratacion), ";
		private const string __ErrorModificacion = "No se pudo hacer la modificacion (Contratacion), ";
		private const string __ErrorTraerUno = "No se pudo Traer Uno (Contratacion), ";
		private const string __ErrorTraerTodos = "No se pudo Traer Todos (Contratacion), ";
		public static void Alta(Contratacion Contratacion)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("IdPostulacion", Contratacion.IdPostulacion);
				pa.add("IdUsuario", Contratacion.IdUsuario);
				pa.add("FechaContratacion", Contratacion.FechaContratacion);
				pa.add("EstadoContratacion", Contratacion.EstadoContratacion);
				pa.add("FechaCamioEstado", Contratacion.FechaCamioEstado);
				pa.add("CalificacionParaPostulante", Contratacion.CalificacionParaPostulante);
				pa.add("CalificacionParaContratante", Contratacion.CalificacionParaContratante);
				pa.add("FechaCalificacionParaPostulante", Contratacion.FechaCalificacionParaPostulante);
				pa.add("FechaCalificacionParaContratante", Contratacion.FechaCalificacionParaContratante);
				using (DataSet ds = Connection.Connection.Traer("p_Contratacion_Alta", pa)) {
					if (ds.Tables.Count > 0) {
						Contratacion.Id = int.Parse(ds.Tables[0].Rows[0][0].ToString());
					} else {
						throw new Exception(__ErrorAlta);
					}
				}
			} catch (Exception ex) {
				throw new Exception(__ErrorAlta + ex.Message);
			}
		}
		public static void Baja(int Id)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("Id", Id);
				Connection.Connection.Ejecutar("p_Contratacion_Baja", pa);
			} catch (Exception ex) {
				throw new Exception(__ErrorBaja + ex.Message);
			}
		}
		public static void Modificar(Contratacion Contratacion)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("Id", Contratacion.Id);
				pa.add("IdPostulacion", Contratacion.IdPostulacion);
				pa.add("IdUsuario", Contratacion.IdUsuario);
				pa.add("FechaContratacion", Contratacion.FechaContratacion);
				pa.add("EstadoContratacion", Contratacion.EstadoContratacion);
				pa.add("FechaCamioEstado", Contratacion.FechaCamioEstado);
				pa.add("CalificacionParaPostulante", Contratacion.CalificacionParaPostulante);
				pa.add("CalificacionParaContratante", Contratacion.CalificacionParaContratante);
				pa.add("FechaCalificacionParaPostulante", Contratacion.FechaCalificacionParaPostulante);
				pa.add("FechaCalificacionParaContratante", Contratacion.FechaCalificacionParaContratante);
				Connection.Connection.Ejecutar("p_Contratacion_Modificacion", pa);
			} catch (Exception ex) {
				throw new Exception(__ErrorModificacion + ex.Message);
			}
		}
		public static Contratacion traerUno(int Id)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("Id", Id);
			using (DataSet ds = Connection.Connection.Traer("p_Contratacion_TraerUno", pa)) {
				if (ds.Tables.Count > 0) {
					if (ds.Tables[0].Rows.Count > 0) {
						return llenarEntidad(ds.Tables[0].Rows[0]);
					}
				}
			}
			throw new Exception(__ErrorTraerUno);
		}
		public static List<Contratacion> TraerTodos()
		{
			using (DataSet ds = Connection.Connection.Traer("p_Contratacion_TraerTodos")) {
				if (ds.Tables.Count > 0) {
					List<Contratacion> li = new List<Contratacion>();
					if (ds.Tables[0].Rows.Count > 0) {
						foreach (DataRow dr in ds.Tables[0].Rows) {
							li.Add(llenarEntidad(dr));
						}
					}
					return li;
				}
			}
			throw new Exception(__ErrorTraerTodos);
		}
		public static List<Contratacion> getAllByIdPostulacion(int IdPostulacion)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("IdPostulacion", IdPostulacion);
			using (DataSet ds = Connection.Connection.Traer("p_Contratacion_getAllByIdPostulacion", pa)) {
				if (ds.Tables.Count > 0) {
					List<Contratacion> li = new List<Contratacion>();
					if (ds.Tables[0].Rows.Count > 0) {
						foreach (DataRow dr in ds.Tables[0].Rows) {
							li.Add(llenarEntidad(dr));
						}
					}
					return li;
				}
			}
			throw new Exception("ErrorgetAllByIdPostulacion");
		}
		public static List<Contratacion> getAllRealizadasByIdUsuario(int IdUsuario)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("IdUsuario", IdUsuario);
			using (DataSet ds = Connection.Connection.Traer("p_Contratacion_getAllByIdUsuario", pa)) {
				if (ds.Tables.Count > 0) {
					List<Contratacion> li = new List<Contratacion>();
					if (ds.Tables[0].Rows.Count > 0) {
						foreach (DataRow dr in ds.Tables[0].Rows) {
							li.Add(llenarEntidad(dr));
						}
					}
					return li;
				}
			}
			throw new Exception("ErrorgetAllByIdUsuario");
		}
        internal static List<Contratacion> getAllRecibidasByIdUsuario(int IdUsuario)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("IdUsuario", IdUsuario);
            using (DataSet ds = Connection.Connection.Traer("p_Contratacion_getAllRecibidasByIdUsuario", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Contratacion> li = new List<Contratacion>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            throw new Exception("ErrorgetAllByIdUsuario");
        }

        internal static List<Contratacion> getAllContratacionesSinCalificarByIdUsuario(int IdUsuario)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("IdUsuario", IdUsuario);
            using (DataSet ds = Connection.Connection.Traer("p_Contratacion_getAllContratacionesSinCalificarByIdUsuario", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Contratacion> li = new List<Contratacion>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            throw new Exception("ErrorgetAllByIdUsuario");
        }

		private static Contratacion llenarEntidad(DataRow dr)
		{
			Contratacion Contratacion = new Contratacion();
			if (dr.Table.Columns.Contains("Id")) {
				if (!object.ReferenceEquals(dr["Id"], DBNull.Value)) {
					Contratacion.Id = int.Parse(dr["Id"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("IdPostulacion")) {
				if (!object.ReferenceEquals(dr["IdPostulacion"], DBNull.Value)) {
					Contratacion.IdPostulacion = int.Parse(dr["IdPostulacion"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("IdUsuario")) {
				if (!object.ReferenceEquals(dr["IdUsuario"], DBNull.Value)) {
					Contratacion.IdUsuario = int.Parse(dr["IdUsuario"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("FechaContratacion")) {
				if (!object.ReferenceEquals(dr["FechaContratacion"], DBNull.Value)) {
					Contratacion.FechaContratacion = DateTime.Parse(dr["FechaContratacion"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("EstadoContratacion")) {
				if (!object.ReferenceEquals(dr["EstadoContratacion"], DBNull.Value)) {
					Contratacion.EstadoContratacion = int.Parse(dr["EstadoContratacion"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("FechaCamioEstado")) {
				if (!object.ReferenceEquals(dr["FechaCamioEstado"], DBNull.Value)) {
					Contratacion.FechaCamioEstado = DateTime.Parse(dr["FechaCamioEstado"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("CalificacionParaPostulante")) {
				if (!object.ReferenceEquals(dr["CalificacionParaPostulante"], DBNull.Value)) {
					Contratacion.CalificacionParaPostulante = int.Parse(dr["CalificacionParaPostulante"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("CalificacionParaContratante")) {
				if (!object.ReferenceEquals(dr["CalificacionParaContratante"], DBNull.Value)) {
					Contratacion.CalificacionParaContratante = int.Parse(dr["CalificacionParaContratante"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("FechaCalificacionParaPostulante")) {
				if (!object.ReferenceEquals(dr["FechaCalificacionParaPostulante"], DBNull.Value)) {
					Contratacion.FechaCalificacionParaPostulante = DateTime.Parse(dr["FechaCalificacionParaPostulante"].ToString());
				}
			}
			
            if (dr.Table.Columns.Contains("FechaCalificacionParaContratante")) {
				if (!object.ReferenceEquals(dr["FechaCalificacionParaContratante"], DBNull.Value)) {
					Contratacion.FechaCalificacionParaContratante = DateTime.Parse(dr["FechaCalificacionParaContratante"].ToString());
				}
			}
            
			return Contratacion;
		}



        
    }
}
